package com.yr.ryjk.doctor.service;

import java.lang.reflect.InvocationTargetException;
import java.util.Map;

import com.yr.ryjk.doctor.entity.Doctor;
import com.yr.ryjk.doctor.entity.DoctorRegister;
import com.yr.ryjk.doctor.entity.FilterParam;
import com.yr.ryjk.doctor.vo.CensusVO;
import com.yr.ryjk.doctor.vo.DoctorVO;
import com.yr.ryjk.doctor.vo.TotalCensusVO;

public interface IDoctorService {
	/**
	 * 根据id获取医生信息
	 * @param id
	 * @return
	 */
	DoctorVO getDoctorById(String id);

	/**
 	 * 新增医生
 	 * @param doctor
 	 */
 	Map<String, Object> addDoctor(Doctor doctor);
	/**
 	 * 修改医生
 	 * @param doctor
 	 */
 	Map<String, Object> modifyDoctorInfo(Doctor doctor);

 	
	/**
	 * 医生注册第一步
	 * @param phone
	 * @param password
	 * @param checkcode
	 * @param session
	 * @return
	 */
	Map<String, Object> addRegister(String phone, String password,
			String checkcode);
	
	/**
	 * 医生注册第二步,完善资料
	 * @param dg
	 * @return
	 */
	void addRegister2(DoctorRegister dg);

	/**
	 * 医生注册第三步,完善资料
	 * @param phone
	 * @param halfPicUrl
	 * @param cardUrl
	 * @param workProofPicUrl
	 */
	void addRegister3(String phone, String halfPicUrl, String cardUrl, String workProofPicUrl);
	
	/**
	 * 医生登录
	 * @param phone
	 * @param password
	 * @param session 
	 * @return
	 * @throws InvocationTargetException 
	 * @throws IllegalAccessException 
	 */
	Map<String, Object> updatelogin(String phone, String password,String jpushKey) throws IllegalAccessException, InvocationTargetException;

	/**
	 * 用户丢失密码后重置密码
	 * @param phone
	 * @param newPassword
	 * @param checkcode
	 * @param session
	 * @return
	 */
	Map<String, Object> updateResetPassword(String phone, String newPassword,
			String checkcode);
	
	/**
	 * 用户主动修改密码
	 * @param oldPassword
	 * @param newPassword
	 * @param token
	 * @return
	 */
	Map<String, Object> updatePassword(String oldPassword, String newPassword,
			String token);
	
	/**
	 * 分页获取医生列表
	 * @param pageNo
	 * @param pageSize
	 * @param status 审核状态
	 * @param name
	 * @param phone
	 * @return
	 */
	Map<String, Object> getListOfPage(int pageNo, int pageSize, int status, String name,
			String phone,String isDown);
	
	/**
	 * 审核帐号
	 * @param ids 医生id集合，逗号分割
	 * @param action 操作,0为通过，1为驳回
	 * @param reason 驳回理由
	 * @return
	 * @throws InvocationTargetException 
	 * @throws IllegalAccessException 
	 */
	void updateCheck(String ids, Integer action, String reason) throws IllegalAccessException, InvocationTargetException;
	/**
	 * 根据科室获取医生id
	 * @param id
	 * @param pageNo
	 * @param pageSize
	 * @param token
	 * @param filterParam 
	 * @return
	 */
	Map<String, Object> getListOfDepartment(int pageNo, int pageSize,String token, FilterParam filterParam);

	/**
	 * 更新浏览次数
	 * @param doctorId
	 */
	void updateIncreaseScanTimes(String doctorId);

	/**
	 * 医生获取个人统计信息
	 * @param token
	 * @return
	 */
	CensusVO getCensusData(String token);
	
	/**
	 * 根据关键字搜索医生
	 * @param pageNo
	 * @param pageSize
	 * @param keyword 可能是医生名字，科室名称或医院名称
	 * @param token
	 * @param filterParam 
	 * @return
	 */
	Map<String, Object> selectSearch(int pageNo, int pageSize, String keyword,
			String token, FilterParam filterParam);
	/**
	 * 分页获取不属于该类型的医生
	 * @param pageNo
	 * @param pageSize
	 * @param typeId
	 * @param name
	 * @param phone
	 * @return
	 */
	Map<String, Object> selectByType(int pageNo, int pageSize, String typeId,
			String name, String phone);

	/**
	 * 添加医生至分类
	 * @param ids
	 * @param group 
	 * @return
	 */
	void modifyDocInGroup(String ids, String group);

	/**
	 * 修改个人咨询价格
	 * @param askPrice
	 * @param token
	 * @return 
	 */
	Map<String, Object> updateAskPrice(int askPrice, String token);

	/**
	 * 后台web获取统计信息
	 * @param docId
	 * @return
	 */
	TotalCensusVO getTotalCensus(String docId);
	
	/**
	 * 医生账号状态
	 * @param docId
	 */
	void modifyDoctorDown(String docId,int isDown);
}